﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CityGames;
using System.Text.RegularExpressions;

namespace CityGamesWeb
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        static private Juego juego = new Juego();
        static private CopiaFisica copiaFisica = new CopiaFisica();

        private string nombre = "";
        private string plataforma = "";
        private string cantidad = "";
        private string tipo = "";
        CarroSocio carroSocio = new CarroSocio();

        protected void Page_Load(object sender, EventArgs e)
        {
            int ult_num = 0;
            try
            {
                nombre = Request.QueryString["juego"];
                plataforma = Request.QueryString["plataforma"];
                cantidad = Request.QueryString["cantidad"];
                tipo = Request.QueryString["tipo"];

                if (ComprobarJuego())
                {                    
                    if (!JuegoAñadido())                                    //COMPRUEBA SI EL JUEGO NO ESTÁ YA EN EL CARRITO DE LA COMPRA
                    {                                                       //SI NO ESTA AÑADIDO LO AÑADE
                        if (Session["numeroJuegos"] != null)
                            ult_num = (int)(Session["numeroJuegos"]);

                        Session["juego" + (ult_num + 1)] = nombre;
                        Session["plataforma" + (ult_num + 1)] = plataforma;
                        Session["cantidad" + (ult_num + 1)] = cantidad;
                        Session["tipo" + (ult_num + 1)] = tipo;

                        Session["numeroJuegos"] = ult_num + 1;

                        if (Session["usuario"] != null)
                            carroSocio.InsertarJuego(Session["usuario"].ToString(), nombre, plataforma, tipo, cantidad);
                        
                    }
                    else
                    {
                        AñadirCopias();
                    }
                    //Redireccionar al carrito
                    Response.Redirect("Carro1.aspx");
                }
            }
            catch (Exception)
            {

            }
        }

        private bool ComprobarJuego()
        {

            bool ok = true;
            string error = "";
            int numeroCopias = 0;

            try
            {
                string ExpRegCant = @"^\d+$";

                if (!Regex.Match(cantidad, ExpRegCant).Success)
                {
                    error += "·La cantidad no es un dígito.";
                    ok = false;
                }

                if (nombre == "" || nombre == null)
                {
                    error += "·No se ha introducido el campo 'Juego'.<br />";
                    ok = false;
                }
                if (plataforma == "" || plataforma == null)
                {
                    error += "·No se ha introducido el campo 'Plataforma'.<br />";
                    ok = false;
                }
                if (cantidad == "" || cantidad == null)
                {
                    error += "·No se ha introducido el campo 'Cantidad'.<br />";
                    ok = false;
                }
                if (tipo == "" || tipo == null)
                {
                    error += "·No se ha introducido el campo 'Tipo'.<br />";
                    ok = false;
                }


                if (ok && !juego.ExisteJuego(nombre, plataforma))                         //COMPRUEBA SI EXISTEN DATOS DEL JUEGO EN LA BD.
                {
                    error += "·El juego '" + nombre + "' de la plataforma '" + plataforma + "' no existe.<br />";
                    ok = false;
                }

                if (ok)                                                             //SI EL JUEGO EXISTE
                {
                    if (tipo == "nuevo")                                             //SI EL JUEGO ES NUEVO
                    {
                        numeroCopias = copiaFisica.NumeroCopiasFisicasNuevas(nombre, plataforma);
                        if (numeroCopias == 0)
                        {
                            error += "·No existen copias nuevas del juego '" + nombre + "' de la plataforma '" + plataforma + "'.<br />";
                            ok = false;
                        }

                    }
                    else if (tipo == "segunda")                                     //SI EL JUEGO ES DE SEGUNDA MANO
                    {
                        numeroCopias = copiaFisica.NumeroCopiasFisicasSegundaMano(nombre, plataforma);
                        if (numeroCopias == 0)
                        {
                            error += "·No existen copias de segunda mano del juego '" + nombre + "' de la plataforma '" + plataforma + "'.<br />";
                            ok = false;
                        }
                    }
                    else                                                            //SI EL TIPO DEL JUEGO NO ES NI NUEVO NI SEGUNDA MANO
                    {
                        error += "·El tipo de juego introducido(" + tipo + ") no es correcto.<br />";
                        ok = false;
                    }

                    if (ok && numeroCopias < int.Parse(cantidad))                    //SI LA CANTIDAD PEDIDA ES MAYOR QUE EL NUMERO DE COPIAS DE LA BD
                    {
                        cantidad = numeroCopias.ToString();
                    }
                }

                if (!ok)
                    Label1.Text = error;
            }
            catch (Exception)
            {
                
            }
            return ok;
        }

        private bool JuegoAñadido()
        {
            bool ok = false;
            int num = 0;

            try
            {
                if (Session["numeroJuegos"] != null)
                    num = (int)(Session["numeroJuegos"]);

                for (int i = 1; i <= num && !ok; i++)
                {
                    if ((Session["juego" + i.ToString()]).ToString() == nombre && (Session["plataforma" + i.ToString()]).ToString() == plataforma && (Session["tipo" + i.ToString()]).ToString() == tipo)
                    {
                        ok = true;
                    }
                }
            }
            catch (Exception)
            {

            }

            return ok;
        }

        private bool AñadirCopias()
        {
            bool ok = false;
            int num = 0;
            int numeroCopias = 0;

            try
            {
                if (Session["numeroJuegos"] != null)
                    num = (int)(Session["numeroJuegos"]);

                for (int i = 1; i <= num && !ok; i++)
                {
                    if ((Session["juego" + i.ToString()]).ToString() == nombre && (Session["plataforma" + i.ToString()]).ToString() == plataforma && (Session["tipo" + i.ToString()]).ToString() == tipo)
                    {
                        if (tipo == "nuevo")                                             //SI EL JUEGO ES NUEVO
                        {
                            numeroCopias = copiaFisica.NumeroCopiasFisicasNuevas(nombre, plataforma);

                        }
                        else if (tipo == "segunda")                                     //SI EL JUEGO ES DE SEGUNDA MANO
                        {
                            numeroCopias = copiaFisica.NumeroCopiasFisicasSegundaMano(nombre, plataforma);
                        }

                        if (int.Parse(Session["cantidad" + i.ToString()].ToString()) + int.Parse(cantidad) > numeroCopias)
                        {
                            Session["cantidad" + i.ToString()] = numeroCopias.ToString();
                            if (Session["usuario"] != null)
                                carroSocio.ModificarCantidad(Session["usuario"].ToString(), nombre, plataforma, tipo, numeroCopias.ToString());
                        }
                        else
                        {
                            Session["cantidad" + i.ToString()] = int.Parse(Session["cantidad" + i.ToString()].ToString()) + int.Parse(cantidad);
                            if (Session["usuario"] != null)
                                carroSocio.ModificarCantidad(Session["usuario"].ToString(), nombre, plataforma, tipo, (int.Parse(Session["cantidad" + i.ToString()].ToString()) + int.Parse(cantidad)).ToString());
                        }
                        ok = true;
                    }
                }
            }
            catch (Exception)
            {

            }

            return ok;
        }
    }
}